/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package msnclient;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.Scanner;
import msncommonsc.Contacto;
import msncommonsc.EnumEstado;
import msncommonsc.Persona;

/**
 *
 * @author Martin
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws RemoteException, NotBoundException {
        Main m = new Main();
        int accion = 0;
        while (accion != 9) {
            System.out.println("MENU");
            System.out.println("");
            System.out.println("1 >> LOGIN");
            System.out.println("2 >> ENVIER_MENSAJE");
            System.out.println("3 >> CAMBIAE ESTADO");
            System.out.println("4 >> CAMBIAR DATOS");
            System.out.println("5 >> AGREGAR CONTACTO");
            System.out.println("6 >> DESCONECTAR");
            System.out.println("7 >> CREAR CUENTA");
            Scanner a = new Scanner(System.in);
            accion = a.nextInt();
            switch (accion) {
                case 1:
                    m.login();
                    break;
                case 2:
                    m.enviarMensaje();
                    break;
                case 3:
                    m.cambiarEstado();
                    break;
                case 4:
                    m.cambiarDatos();
                    break;
                case 5:
                    m.agregarContacto();
                    break;
                case 6:
                    m.desconectar();
                    break;
                case 7:
                    m.crearCuenta();
                    break;
            }
        }
    }

    public void enviarMensaje() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        Persona persona = cliente.getP();
        String conectados = "";
        for (Contacto c : persona.getMapaContactos()) {
            conectados = conectados + "  --  " + c.getNombre() + "  --  ";
        }
        System.out.println(conectados);
        System.out.println("Ingrese destinatario");
        String des = pedirDato();
        System.out.println("Ingrese mensaje");
        String mensaje = pedirDato();
        boolean enviarM = cliente.enviarMensaje(des, mensaje);
        if (enviarM) {
                System.out.println("Se mando correctamente");
            } else {
                System.out.println("x algun motivo no se mando");
            }
    }

    public void login() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("ingrese usuario :");
        String nombre = pedirDato();
        System.out.println("ingrese contraceña :");
        String contracena = pedirDato();
        Boolean conectar = cliente.conectar(nombre, contracena);
        if (conectar) {
            System.out.println(cliente.getP().getNombre());
            System.out.println(cliente.getP().getNick());
        } else {
            System.out.println("Usuario y/o Contraseña Equivocados");
        }
    }

    private void cambiarEstado() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("Ingrese nuevo estado :");
        String estado = pedirDato();
        if (estado.equals("ausente")) {
            cliente.cambiarEstado(EnumEstado.AUSENTE);
        } else if (estado.equals("conectado")) {
            cliente.cambiarEstado(EnumEstado.CONECTADO);
        } else if (estado.equals("no disponible")) {
            cliente.cambiarEstado(EnumEstado.NO_DISPONIBLE);
        }
        if (estado.equals("invisible")) {
            cliente.cambiarEstado(EnumEstado.INVISIBLE);
        } else {
            System.out.println("errrrooooooooorrrrrrrrrrrrrrrrrrrr");
        }
    }

    private void cambiarDatos() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("ingrese el nuevo nick :");
        String nick = pedirDato();
        System.out.println("ingrese contraceña vieja :");
        String contraceñaV = pedirDato();
        System.out.println("ingrese contraceña nueva :");
        String contraceñaN = pedirDato();
        int cambiarDatos = cliente.cambiarDatosPersonales(nick, contraceñaN, contraceñaV);
        if (cambiarDatos == 1) {
            System.out.println("Se cambio correctamente el nick");
        } else if (cambiarDatos == 2) {
            System.out.println("Se cambio correctamente la contraceña");
        } else if (cambiarDatos == 3) {
            System.out.println("Se cambio correctamente el nick y contraceña");
        } else {
            System.out.println("no se pudieron cambiar los datos x algun motivo");
        }
    }

    private void agregarContacto() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("ingresar nombre contacto : ");
        String nombre = pedirDato();
        Boolean agregar = cliente.agregarContacto(nombre);
        if (agregar) {
            System.out.println("Se agrego correctamente");
        } else {
            System.out.println("no se pudo agregar");
        }
    }

    private void desconectar() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("usted se a desconectado");
        cliente.desconectar();
    }

    private void crearCuenta() throws RemoteException, NotBoundException {
        Cliente cliente = Cliente.getInstancia();
        System.out.println("ingrese nombre :");
        String nombre = pedirDato();
        System.out.println("ingrese nick :");
        String nick = pedirDato();
        System.out.println("ingrese contraceña :");
        String contracena = pedirDato();
        Boolean crearCuenta = cliente.crearCuenta(nombre, nick, contracena);
    }

    public String pedirDato() {
        String texto = "";
        Scanner a = new Scanner(System.in);
        texto = a.nextLine();
        return texto;
    }
}
